package com.t.bricks.bussiness.controller.sourcemanage;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.t.bricks.bussiness.service.sourcemanage.SourceManageService;
import com.t.bricks.model.MsgEmity;

@RestController
@Api(value="资源管理", tags={"资源系统-资源管理操作接口"})
@RequestMapping("/source/manage/")
public class SourceManageController {
	
	@Autowired
	private SourceManageService sourceManageService;

	/**
	 * 创建目录内的文件信息
	 * @param dir
	 * @return
	 */
	//[start]
	@ApiOperation(value="创建目录内的文件信息")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="目录参数为空"),
		@ApiResponse(code=8002, message="目录不存在.注意:目录只能是相对路径")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/create/info")
	public MsgEmity createInfo(String dir) {
		return sourceManageService.createInfo(dir);
	}
	
	/**
	 * 上传文件
	 * @param dir
	 * @param file
	 * @return
	 */
	//[start]
	@ApiOperation(value="上传文件")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="file", value="文件", dataType="__file", paramType="form", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请求存储的路径为空"),
		@ApiResponse(code=8002, message="出于安全考虑,请求存储的路径不能是绝对路径"),
		@ApiResponse(code=8003, message="指定的文件名不合法"),
		@ApiResponse(code=8004, message="文件保存发生异常")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/file/up")
	public MsgEmity upFile(String dir, @RequestParam("file") MultipartFile file) {
		return sourceManageService.upFile(dir, file);
	}

	/**
	 * 删除文件
	 * @param path
	 * @return
	 */
	//[start]
	@ApiOperation(value="删除文件")
	@ApiImplicitParams({
		@ApiImplicitParam(name="path", value="相对路径", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="指定文件参数不是一个文件,不能删除"),
		@ApiResponse(code=8002, message="删除失败,请检查文件是否在占用中")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/file/del")
	public MsgEmity delFile(String path) {
		return sourceManageService.delFile(path);
	}

	/**
	 * 删除文件夹
	 * @param dir
	 * @return
	 */
	//[start]
	@ApiOperation(value="删除文件夹")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="指定文件夹参数缺失"),
		@ApiResponse(code=8002, message="不允许删除根路径"),
		@ApiResponse(code=8003, message="指定文件夹参数不是一个目录,不能删除"),
		@ApiResponse(code=8004, message="删除失败,请检查文件夹是否在占用中")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/folder/del")
	public MsgEmity delFolder(String dir) {
		return sourceManageService.delFolder(dir);
	}

	/**
	 * 查找文件夹信息
	 * @param dir
	 * @return
	 */
	//[start]
	@ApiOperation(value="查找文件夹信息")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="指定文件夹参数缺失"),
		@ApiResponse(code=8002, message="不允许删除根路径"),
		@ApiResponse(code=8003, message="指定文件夹参数不是一个目录,不能删除"),
		@ApiResponse(code=8004, message="删除失败,请检查文件夹是否在占用中")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/find/folder")
	public MsgEmity findFolder(@RequestParam("dir") String dir) {
		return sourceManageService.findFolder(dir);
	}

	/**
	 * 读取文件内容
	 * @param dir
	 * @param name
	 * @return
	 */
	//[start]
	@ApiOperation(value="读取文件内容")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="name", value="文件名", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请指定文件名"),
		@ApiResponse(code=8002, message="文件不存在")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/file/read")
	public MsgEmity readFile(String dir, String name) {
		return sourceManageService.readFile(dir, name);
	}

	/**
	 * 保存内容到文件
	 * @param dir
	 * @param name
	 * @param sContent
	 * @return
	 */
	//[start]
	@ApiOperation(value="保存内容到文件")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="name", value="文件名", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="sContent", value="内容", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请指定文件名"),
		@ApiResponse(code=8002, message="文件内容缺失"),
		@ApiResponse(code=8003, message="保存文件失败")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/file/save")
	public MsgEmity saveFile(String dir, String name, String sContent) {
		return sourceManageService.saveFile(dir, name, sContent);
	}
	
	/**
	 * 资源管理器
	 * @param dir
	 * @return
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/explorer")
	public MsgEmity explorer(@RequestParam("dir") String dir) {
		return sourceManageService.explorer(dir);
	}

	/**
	 * 添加文件夹
	 * @param dir
	 * @param name
	 * @return
	 */
	//[start]
	@ApiOperation(value="添加文件夹")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="name", value="名称", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请求存储的路径为空"),
		@ApiResponse(code=8002, message="出于安全考虑,请求存储的路径不能是绝对路径"),
		@ApiResponse(code=8003, message="存在同名文件")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/folder/add")
	public MsgEmity addFolder(String dir, String name) {
		return sourceManageService.addFolder(dir, name);
	}

	/**
	 * 初始化页面
	 * @param dir 上级目录(相对路径)
	 * @param name 文件夹名
	 * @param iOverlap 是否直接覆盖;1:true
	 * @return
	 */
	//[start]
	@ApiOperation(value="初始化页面")
	@ApiImplicitParams({
		@ApiImplicitParam(name="dir", value="相对路径(相对路径)", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="name", value="文件夹名", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="iOverlap", value="是否直接覆盖", dataType="Integer", paramType="query", required=false)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请求存储的路径为空"),
		@ApiResponse(code=8002, message="出于安全考虑,请求存储的路径不能是绝对路径"),
		@ApiResponse(code=8003, message="存在同名文件")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/html/init")
	public MsgEmity htmlInit(String dir, String name, Integer iOverlap) {
		return sourceManageService.htmlInit(dir, name, iOverlap);
	}

	/**
	 * 保存页面
	 * @param sPath 文件路径(相对路径)
	 * @param sContent 内容
	 * @return
	 */
	//[start]
	@ApiOperation(value="初始化页面")
	@ApiImplicitParams({
		@ApiImplicitParam(name="sPath", value="文件路径(相对路径)", dataType="String", paramType="query", required=true),
		@ApiImplicitParam(name="sContent", value="内容", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请求存储的路径为空"),
		@ApiResponse(code=8002, message="出于安全考虑,请求存储的路径不能是绝对路径"),
		@ApiResponse(code=8003, message="存在同名文件")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/html/save")
	public MsgEmity htmlSave(String sPath, String sContent) {
		return sourceManageService.htmlSave(sPath, sContent);
	}

	/**
	 * 创建页面
	 * @param path 相对路径
	 * @return
	 */
	//[start]
	@ApiOperation(value="初始化页面")
	@ApiImplicitParams({
		@ApiImplicitParam(name="path", value="相对路径", dataType="String", paramType="query", required=true)
	})
	@ApiResponses({
		@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值}"),
		@ApiResponse(code=400, message="错误的请求,请检查路径"),
		@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
		@ApiResponse(code=1000001, message="内部请求密钥错误"),
		@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
		@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
		@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
		@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
		@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
		@ApiResponse(code=8001, message="请求存储的路径为空"),
		@ApiResponse(code=8002, message="出于安全考虑,请求存储的路径不能是绝对路径"),
		@ApiResponse(code=8003, message="存在同名文件")
	})
	//[end]
	@RequestMapping(method={RequestMethod.POST}, value="/html/create")
	public MsgEmity createHtml(String path) {
		return sourceManageService.createHtml(path);
	}
	
}
